#ifndef COMMANDE_H
#define COMMANDE_H

#include <map>
#include <stack>
#include "Interface.h"
#include "Robot.h"

class Commande{
	protected:
		static map<string, Commande*> _lstCommandes;
		static stack<Commande *> _historique;
		static Interface _executeur;
	public:
		Commande(string c){
			_lstCommandes[c] = this;
		}
		static Commande * nouvelleCommande(string name, Robot* r){
			return _lstCommandes[name]->constructeurVirtuel(r);
		}
		virtual void execute()=0;
		virtual void desexecute()=0;
		virtual bool reversible()=0;
		virtual Commande* constructeurVirtuel(Robot *r)=0;

};
#endif
